'use strict' 

process.chdir(__dirname)

const titbit = require('titbit')
const fs = require('fs')
const pg = require('pg');
const dbconfig = require('./dbconfig.js')
// 使用HTTP1.1客户端
const {httpcli} = require('gohttp')
const wxkey = require('./wxkey.js')
const tbloader = require('titbit-loader')

const token = require('titbit-token')
let tok = new token({
    // token有效期，单位：秒
    expires:30,
    //必须是32位字母数字
    key:'zxcvbnmlk8huio8iuhgt7huioplk1234',
    // 必须是16位字母数字
    iv:'12mnjkl356hdvxj8'
})

// 初始化数据库连接
let psql = new pg.Pool(dbconfig)

try{
    fs.accessSync('./images')

}catch(err){
    fs.mkdirSync('./images')
}

let cert_path = '/usr/local/share'

const app = new titbit({
    // 开启调试模式，会输出错误信息
    globalLog:true,
    debug:true,
    cert:`${cert_path}/apiwec.wzryrjxy.xyz.pem`,
    key:`${cert_path}/apiwec.wzryrjxy.xyz.key`
})

let tb = new tbloader();
tb.init(app);

// 就是在app.service中添加了一个属性
app.addService('tok',tok);
app.addService('psql',psql);

app.addService('imagePath',`${__dirname}/images`)


/**------------------------content 路由----------------- */
//转移至content.js中的路由
/**------------------------content 路由 - END----------------- */



// c就是content
app.get('/',async c =>{      //添加get路由，当返回时触发
    c.send('ok')
})

app.get('/upload',async c=>{
    //.helper是助手函数模块，其中有对stream.pipe的封装
    //c.reply是响应对象，http/1.1中指向response，http/2中指向stream
    await c.helper.pipe('./upload.html',c.reply)
})

// JS无需加分号，谁用谁知道
// 有时也得加分号，括号开头很重要
// 箭头函数用来解救this
;(async()=>{

})()

//转移至image.js中
// app.post('/upload',async c =>{   //传信息
// app.get('/image/:name',async c=>{  //设置的路由


app.get('/mp-login/:code',async c=>{
    //c.send(c.param)
    let auth_url = `https://api.weixin.qq.com/sns/jscode2session`
                    + `?appid=${wxkey.appid}&secret=${wxkey.secret}`
                    + `&js_code=${c.param.code}&grant_type=authorization_code`

    let ret = await httpcli.get(auth_url)
                            .then(res=>{
                                return res.json()
                            })
    c.send(tok.make(ret));
    
})

//监听2003端口运行服务
app.run(2003)